package nio.channel;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;

public class ChannelTest2 {

	public static void main(String[] args) throws IOException {
		
		// 1、获得 Path 实例
		Path path = Path.of( "src/nio/channel/ChannelTest2.java" );
		
		// 2、打开 FileChannel
		FileChannel channel = FileChannel.open( path ); // 开启一个只读通道
		
		// 3、准备缓冲区
		final ByteBuffer buffer = ByteBuffer.allocate( 100 );
		System.out.println( buffer ); // [pos=0 lim=100 cap=100]
		
		int n ;
		// 4、通过 channel 把文件中的内容读取到缓冲区中，并返回直接读取到的有效字节数
		while( ( n = channel.read( buffer ) ) != -1 ) {
			//System.out.print( buffer );
			buffer.flip(); // 5.1、反转缓冲区 以便于处理 起始位置 到 限制位置 之间的内容
			//System.out.println( " , " + buffer );
			
			// 5.2、从缓冲区中获取数据
			byte[] bytes = buffer.array();
			String s = new String( bytes , 0 , n );
			System.out.print( s );
			
			buffer.clear(); // 5.3、清除缓冲区 以便于 下一次使用
		}
		
		// 6、关闭 FileChannel
		channel.close();
		
	}

}
